const path = require('path')
const http = require('http')
// const https = require('https')

const fs = require('fs')
const Koa = require('koa')
const cors = require('koa2-cors');
// const body = require('koa-better-body')
const bodyparser = require('koa-body')
const static = require('koa-static')
const logger = require('koa-logger')
const Moment = require('moment')
const router = require('./router.js')

const app = new Koa()

app.on('error', err => {
    console.error('server error', err)
});

app.use(logger((str, args) => {
    // redirect koa logger to other output pipe
    // default is process.stdout(by console.log function)
    let log = Moment().format('YYYY-MM-DD HH:mm:ss') + str
    fs.appendFileSync('./logger.txt', log + '\n')
  }))

// 可以指定多个静态目录
app.use(static(path.join(__dirname+'/frontend'))) // http://localhost:3000/index.html
app.use(static(path.join(__dirname+'/public'))) // http://localhost:3000/upload/upload_9c3c3b147b49df8eedc1a2115d878a14.txt

app.use(bodyparser({
    // 配置上传
    multipart:true,
    formidable:{
        uploadDir:path.join(__dirname,'public/upload/'), // 设置文件上传目录
        keepExtensions: true,    // 保持文件的后缀
        maxFieldsSize:2 * 1024 * 1024, // 文件上传大小
        onFileBegin:(name,file) => { // 文件上传前的设置
        //   console.log(`name: ${name}`);
        //   console.log(file);
        console.log(fs.existsSync(file.path)) // false 文件还没有保存
        },
      }
}))

// 配置跨域
app.use(cors({
    credentials: true, // 允许跨域请求携带cookie
}))

// 测试cookie
app.use(async(ctx, next)=>{
    let cookieA = ctx.cookies.get('a')
    if (cookieA) {
        console.log('cookieA =>',cookieA);
    } else {
        console.log('no cookie');

        // ctx.cookies.set('a', '444', {
        //     // sameSite: 'None',
        //     // secure: 'None', // 前端收不到这个属性，直接设置下面的响应头
        // })

        // 主域名相同
        // ctx.response.set('Set-Cookie', 'a=5555; path=/; httponly')

        // http 主域名不同需要设置 SameSite=None; Secure=false;
        // todo 子域名不同，https，cookie设置domain
        ctx.response.set('Set-Cookie', 'a=5555; path=/; SameSite=None; Secure=false; httponly')
        // ctx.cookies.set('c', '666', {
        //     httpOnly: false,
        //     path: '/a'
        // })
    }
    await next()
})

// app.use((ctx, next)=>{
//     // 设置响应头, 可以使用 koa-cors 中间件设置跨域
//     // ctx.response.set('Access-Control-Allow-Credentials', true)
//     // ctx.response.set('Access-Control-Allow-Origin', 'http://localhost:3001')
//     next()
// })

app.use(router.routes())
app.use(router.allowedMethods()); // https://www.jianshu.com/p/fef91266a44c


// app.listen(3000)
http.createServer(app.callback()).listen(3000);
